/*
    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

*/

#ifndef DRAW_BVHNODE_H
#define DRAW_BVHNODE_H

#include <QVector>
#include <QList>
#include "objects/plane.h"

namespace draw {

  class Box;
  class HitRecord;
  
class BVHNode : public object::Plane
{
  public:
    BVHNode(QList<object::Plane*> *A, int axis);
    ~BVHNode();
    
    // with hitrecords
    virtual bool hit(draw::Ray * ray, draw::HitRecord ** rec);
    
    // no hitrecords
    virtual bool hit(draw::Ray * ray, float tMax);
    
  private:
    Plane * left; // could also be bounding box
    Plane * right; // could also be bounding box
    draw::HitRecord * lrec;
    draw::HitRecord * rrec;
    
    int currentAxis;
    
    QList<Plane*> temp1;
    QList<Plane*> temp2;
};

}

#endif // DRAW_BVHNODE_H
